import java.util.Scanner;

public class ContadoresParalelo {
	public static void main(String[] args) {
		ContadorSecuencial h1 = new ContadorSecuencial();
		ContadorPares h2 = new ContadorPares();

		String opcion;

		boolean salida = false;


		while (!salida) {
			Scanner kbd = new Scanner(System.in);
			System.out.println("\n¿Quieres leer el contador secuencial (s), el de pares (p) o ambos (a)? (q para salir)");
			opcion = kbd.nextLine();
			switch (opcion) {
				case "s":
				case "S":
					System.out.println(h1.getContador());
					break;
				case "p":
				case "P":
					System.out.println(h2.getContador());
					break;
				case "a":
				case "A":
					System.out.println("Secuencial: " + h1.getContador() + "\nPares: " + h2.getContador());
					break;
				case "q":
				case "Q":
					salida = true;
					h1.kill();
					h2.kill();
					break;
				default:
					System.out.println("No has introducido una opción adecuada");
			}
		}

	}
}

class ContadorSecuencial implements Runnable {
	private Thread hilo;
	private long i;
	private volatile boolean continuar;

	public ContadorSecuencial() {
		continuar = true;
		hilo = new Thread(this);
		hilo.start();
	}

	public long getContador() {
		return i;
	}

	public void kill() {
		continuar = false;
	}

	@Override
	public void run() {
		i = 0;
		while (continuar) {
			i += 1;
		}
		System.out.println("Contador secuencial terminado");
	}
}

class ContadorPares implements Runnable {
	private Thread hilo;
	private long i;
	private volatile boolean continuar;

	public ContadorPares() {
		continuar = true;
		hilo = new Thread(this);
		hilo.start();
	}

	public long getContador() {
		return i;
	}

	public void kill() {
		continuar = false;
	}

	@Override
	public void run() {
		i = 0;
		while (continuar) {
			i += 2;
		}
		System.out.println("Contador por pares terminado");
	}
}
